Sequential API(build model)

model=tf.keras.Sequential()
model.add(tf.keras.layers.Dense(units=16, activation='relu'))
model.add(tf.keras.layers.Dense(units=32, activation='relu'))
model.build(input_shape=(None, 4))
model.summary()

Model: "sequential"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense (Dense)                (None, 16)                80        

_________________________________________________________________

dense_1 (Dense)              (None, 32)                544       

=================================================================

Total params: 624

Trainable params: 624

Non-trainable params: 0

_________________________________________________________________

build(변수 지연 생성)로 파라미터 입력 크기를 지정(4)하여 모델을 정의한 후 특정 크기의 변수를 초기화했다.
for v in model.variables:
print('{:20s}'.format(v.name), v.trainable, v.shape)

dense/kernel:0       True (4, 16)

dense/bias:0         True (16,)

dense_1/kernel:0     True (16, 32)

dense_1/bias:0       True (32,)

각 층은 가중치 행렬 kernel과 절편 벡터 bias를 가진다.
모델을 생성할 때, 활성화 함수, 변수 초기화, 또는 파라미터 규제등을 설정해야 한다.
tf.keras.activations(활성화 함수)
https://www.tensorflow.org/api_docs/python/tf/keras/activations
tf.keras.initializers(파라미터 초기화)
https://www.tensorflow.org/api_docs/python/tf/keras/initializers
tf.keras.regularizers(층의 파라미터 규제-과대적합 방지)
https://www.tensorflow.org/api_docs/python/tf/keras/regularizers
첫 번째 층에 커널과 절편 변수의 초기화를 지정, 두 번째 층에서 커널(가중치 행렬)에 L1 규제를 적용
model=tf.keras.Sequential()
model.add(
tf.keras.layers.Dense(units=16,
activation=tf.keras.activations.relu,
kernel_initializer=tf.keras.initializers.glorot_uniform(),
bias_initializer=tf.keras.initializers.Constant(2.0)))
model.add(
tf.keras.layers.Dense(units=32,
activation=tf.keras.activations.sigmoid,
kernel_regularizer=tf.keras.regularizers.l1))
컴파일(compile)할 때, 모델 설정
옵티마이저의 타입
https://www.tensorflow.org/api_docs/python/tf/keras/optimizers
훈련에 사용할 손실 함수
https://www.tensorflow.org/api_docs/python/tf/keras/losses
훈련, 검증 테스트 데이터셋에 대한 성능 리포팅에 사용할 지표
https://www.tensorflow.org/api_docs/python/tf/keras/metrics
SGD 옵티마이저, 이진 분류를 위한 크로스 엔트로피 손실 함수를 이용
정확도, 정밀도, 재현율을 사용하는 모델
model.compile(
optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),
loss=tf.keras.losses.BinaryCrossentropy(),
metrics=[tf.keras.metrics.Accuracy(),
tf.keras.metrics.Precision(),
tf.keras.metrics.Recall(), ])
손실 함수
최적화 알고리즘 중 SGD와 Adam이 가장 널리 이용된다.
손실 함수는 선택은 문제에 따라 다르다.(ex 회귀: 평균 제곱 오차 손실을 사용 가능)

크로스 엔트로피 손실 함수는 분류 작업에 사용할 수 있다.
정밀도, 재현율, 정확도, AUC, 거짓 음성과 거짓 양성 점수 모두 분류 모델을 평가하는데 적절하다.
compile을 한 이후, model.fit() 메서드를 호출하여 모델을 훈련할 때 훈련 성능(검증데이터일 경우 검증 성능)을
평가하기 위해 지정한 측정 지표와 손실을 기록한 값이 반환된다.(기록을 이용해서 학습 과정을 분석할 수 있다.)
compile() 메서드 매개변수 소문자 문자열 사용
옵티마이저로 SGD 클래스의 기본값을 사용할 때, optimizer=‘sgd’와 같이 소문자 문자열로 쓸 수 있다.

loss 매개변수
- 이진 크로스 엔트로피: ‘binary_crossentropy’
- 범주형 크로스 엔트로피: ‘categorical_crossentropy’
- 평균 제곱 오차: ‘mse’
- 평균 절대값 오차: ‘mae’

metrics 매개변수
- 정확도: ‘accuracy’
- 평균 제곱 오차: ‘mse’
- 평균 절댓값 오차: ’mae'